package ase.eleitweg;

import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

import ase.eleitweg.server.AdminLoginController;
import ase.eleitweg.server.AdminLoginInterface;
import ase.eleitweg.server.RunController;
import ase.eleitweg.server.RunManager;
import ase.eleitweg.server.ServerAdminController;
import ase.eleitweg.server.ServerAdminHandle;
import ase.eleitweg.server.ServerUserController;
import ase.eleitweg.server.ServerUserHandle;
import ase.eleitweg.server.UserController;
import ase.eleitweg.server.UserLoginController;
import ase.eleitweg.server.UserLoginInterface;
import ase.eleitweg.server.UserManager;
import ase.eleitweg.server.WorkflowController;
import ase.eleitweg.server.WorkflowManager;

import com.google.inject.*;

public class RMIModuleServer extends AbstractModule {

	@Override
	protected void configure() {
		try {
			/*bind(UserManager.class).toInstance(UserController.getRemoteInstance());
			bind(WorkflowManager.class).toInstance(WorkflowController.getRemoteInstance());
			bind(RunManager.class).toInstance(RunController.getRemoteInstance());*/
			bind(UserManager.class).to(UserController.class).in(Scopes.SINGLETON);
			bind(WorkflowManager.class).to(WorkflowController.class).in(Scopes.SINGLETON);
			bind(RunManager.class).to(RunController.class).in(Scopes.SINGLETON);
			
			/*AdminLoginInterface alc = AdminLoginController.getInstance();
            AdminLoginInterface ali = (AdminLoginInterface) UnicastRemoteObject.exportObject(alc, 0);
			bind(AdminLoginInterface.class).toInstance(ali);*/
			//bind(AdminLoginInterface.class).toProvider(ALIProvider.class);
			bind(AdminLoginInterface.class).to(AdminLoginController.class);
			
			/*UserLoginController ulc = UserLoginController.getInstance();
            UserLoginInterface uli = (UserLoginInterface) UnicastRemoteObject.exportObject(ulc, 0);
			bind(UserLoginInterface.class).toInstance(uli);*/
			bind(UserLoginInterface.class).to(UserLoginController.class);
			
			/*ServerUserController suc = new ServerUserController();
			ServerUserHandle suh = (ServerUserHandle) UnicastRemoteObject.exportObject(suc, 0);
			bind(ServerUserHandle.class).toInstance(suh);*/
			bind(ServerUserHandle.class).to(ServerUserController.class).in(Scopes.SINGLETON);
			
			/*ServerAdminController sac = new ServerAdminController();
			ServerAdminHandle sah = (ServerAdminHandle) UnicastRemoteObject.exportObject(sac, 0);
			bind(ServerAdminHandle.class).toInstance(sah);*/
			bind(ServerAdminHandle.class).to(ServerAdminController.class).in(Scopes.SINGLETON);
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

